60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516132e66100f95f395f81816115720152818161159b01526116da01526132e65ff3fe608060405260043610610228575f3560e01c806370a08231116101295780639ab24eb0116100a8578063d505accf1161006d578063d505accf1461069b578063d9d98ce4146106ba578063dd62ed3e146106d9578063f1127ed8146106f8578063f2fde38b14610743575f80fd5b80639ab24eb0146105ef578063a9059cbb1461060e578063ad3cb1cc1461062d578063c3cda5201461065d578063c4d66de81461067c575f80fd5b806384b0196e116100ee57806384b0196e1461052e5780638da5cb5b146105555780638e539e8c1461059157806391ddadf4146105b057806395d89b41146105db575f80fd5b806370a08231146104a9578063715018a6146104c857806379cc6790146104dc5780637ecebe00146104fb5780638456cb591461051a575f80fd5b806342966c68116101b55780635c19a95c1161017a5780635c19a95c146103f55780635c975abb146104145780635cffe9de14610437578063613255ab146104565780636fcfff4514610475575f80fd5b806342966c68146103645780634bf5d7e9146103835780634f1ef2861461039757806352d1902d146103aa578063587cde1e146103be575f80fd5b8063313ce567116101fb578063313ce567146102e15780633644e515146102fc5780633a46b1a8146103105780633f4ba83a1461032f57806340c10f1914610345575f80fd5b806306fdde031461022c578063095ea7b31461025657806318160ddd1461028557806323b872dd146102c2575b5f80fd5b348015610237575f80fd5b50610240610762565b60405161024d9190612a78565b60405180910390f35b348015610261575f80fd5b50610275610270366004612a9e565b610807565b604051901515815260200161024d565b348015610290575f80fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b60405190815260200161024d565b3480156102cd575f80fd5b506102756102dc366004612ac8565b610820565b3480156102ec575f80fd5b506040516012815260200161024d565b348015610307575f80fd5b506102b4610845565b34801561031b575f80fd5b506102b461032a366004612a9e565b610853565b34801561033a575f80fd5b506103436108e8565b005b348015610350575f80fd5b5061034361035f366004612a9e565b6108fa565b34801561036f575f80fd5b5061034361037e366004612b06565b610910565b34801561038e575f80fd5b5061024061091d565b6103436103a5366004612b31565b610995565b3480156103b5575f80fd5b506102b46109b0565b3480156103c9575f80fd5b506103dd6103d8366004612bf7565b6109cb565b6040516001600160a01b03909116815260200161024d565b348015610400575f80fd5b5061034361040f366004612bf7565b6109f4565b34801561041f575f80fd5b505f805160206132918339815191525460ff16610275565b348015610442575f80fd5b50610275610451366004612c12565b6109ff565b348015610461575f80fd5b506102b4610470366004612bf7565b610b71565b348015610480575f80fd5b5061049461048f366004612bf7565b610bb5565b60405163ffffffff909116815260200161024d565b3480156104b4575f80fd5b506102b46104c3366004612bf7565b610bbf565b3480156104d3575f80fd5b50610343610bef565b3480156104e7575f80fd5b506103436104f6366004612a9e565b610c00565b348015610506575f80fd5b506102b4610515366004612bf7565b610c15565b348015610525575f80fd5b50610343610c1f565b348015610539575f80fd5b50610542610c2f565b60405161024d9796959493929190612cab565b348015610560575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166103dd565b34801561059c575f80fd5b506102b46105ab366004612b06565b610cd8565b3480156105bb575f80fd5b506105c4610d52565b60405165ffffffffffff909116815260200161024d565b3480156105e6575f80fd5b50610240610d5b565b3480156105fa575f80fd5b506102b4610609366004612bf7565b610d99565b348015610619575f80fd5b50610275610628366004612a9e565b610df7565b348015610638575f80fd5b50610240604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610668575f80fd5b50610343610677366004612d56565b610e04565b348015610687575f80fd5b50610343610696366004612bf7565b610ec0565b3480156106a6575f80fd5b506103436106b5366004612dac565b611086565b3480156106c5575f80fd5b506102b46106d4366004612a9e565b61119f565b3480156106e4575f80fd5b506102b46106f3366004612e16565b6111da565b348015610703575f80fd5b50610717610712366004612e4d565b611223565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161024d565b34801561074e575f80fd5b5061034361075d366004612bf7565b611240565b60605f5f805160206132318339815191525b905080600301805461078590612e81565b80601f01602080910402602001604051908101604052809291908181526020018280546107b190612e81565b80156107fc5780601f106107d3576101008083540402835291602001916107fc565b820191905f5260205f20905b8154815290600101906020018083116107df57829003601f168201915b505050505091505090565b5f3361081481858561127a565b60019150505b92915050565b5f3361082d85828561128c565b6108388585856112ef565b60019150505b9392505050565b5f61084e61134c565b905090565b5f5f805160206132118339815191528161086b610d52565b90508065ffffffffffff1684106108ab57604051637669fc0f60e11b81526004810185905265ffffffffffff821660248201526044015b60405180910390fd5b6108d66108b785611355565b6001600160a01b0387165f90815260018501602052604090209061138b565b6001600160d01b031695945050505050565b6108f061143b565b6108f8611496565b565b61090261143b565b61090c82826114f5565b5050565b61091a3382611529565b50565b606061092761155d565b65ffffffffffff16610937610d52565b65ffffffffffff161461095d576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b61099d611567565b6109a68261160b565b61090c8282611613565b5f6109b96116cf565b505f8051602061327183398151915290565b6001600160a01b039081165f9081525f8051602061321183398151915260205260409020541690565b3361090c8183611718565b5f80610a0a86610b71565b905080851115610a305760405163fd9a760960e01b8152600481018290526024016108a2565b5f610a3b878761119f565b9050610a4788876114f5565b6040516323e30c8b60e01b81527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9906001600160a01b038a16906323e30c8b90610a9f9033908c908c9088908d908d90600401612eb9565b6020604051808303815f875af1158015610abb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adf9190612f11565b14610b075760405162678c5b60e81b81526001600160a01b03891660048201526024016108a2565b5f610b1c8930610b17858b612f3c565b61128c565b811580610b3057506001600160a01b038116155b15610b4d57610b4889610b43848a612f3c565b611529565b610b62565b610b578988611529565b610b628982846112ef565b50600198975050505050505050565b5f6001600160a01b0382163014610b88575f61081a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461081a905f19612f4f565b5f61081a8261179f565b5f805f805160206132318339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b610bf761143b565b6108f85f6117ee565b610c0b82338361128c565b61090c8282611529565b5f61081a8261185e565b610c2761143b565b6108f8611868565b5f60608082808083815f805160206132518339815191528054909150158015610c5a57506001810154155b610c9e5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016108a2565b610ca66118b0565b610cae6118ee565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f5f8051602061321183398151915281610cf0610d52565b90508065ffffffffffff168410610d2b57604051637669fc0f60e11b81526004810185905265ffffffffffff821660248201526044016108a2565b610d41610d3785611355565b600284019061138b565b6001600160d01b0316949350505050565b5f61084e61155d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f805160206132318339815191529161078590612e81565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081205f8051602061321183398151915290610de790611904565b6001600160d01b03169392505050565b5f336108148185856112ef565b83421115610e2857604051632341d78760e11b8152600481018590526024016108a2565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f90610ea190610e999060a0016040516020818303038152906040528051906020012061193b565b858585611967565b9050610ead8187611993565b610eb78188611718565b50505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610f055750825b90505f8267ffffffffffffffff166001148015610f215750303b155b905081158015610f2f575080155b15610f4d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f7757845460ff60401b1916600160401b1785555b610fbc604051806040016040528060078152602001661553925d195cdd60ca1b8152506040518060400160405280600481526020016374554e4960e01b8152506119d1565b610fc46119e3565b610fcc6119eb565b610fd5866119fb565b610ffd604051806040016040528060078152602001661553925d195cdd60ca1b815250611a0c565b6110056119e3565b61100d6119e3565b6110156119e3565b611038336110256012600a61303d565b61103390633b9aca0061304b565b6114f5565b831561107e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b834211156110aa5760405163313c898160e11b8152600481018590526024016108a2565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886110d88c611a37565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6111328261193b565b90505f61114182878787611967565b9050896001600160a01b0316816001600160a01b031614611188576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016108a2565b6111938a8a8a61127a565b50505050505050505050565b5f6001600160a01b03831630146111d457604051635ad3edc960e11b81526001600160a01b03841660048201526024016108a2565b5f61083e565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b604080518082019091525f808252602082015261083e8383611a78565b61124861143b565b6001600160a01b03811661127157604051631e4fbdf760e01b81525f60048201526024016108a2565b61091a816117ee565b6112878383836001611ae1565b505050565b5f61129784846111da565b90505f1981146112e957818110156112db57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016108a2565b6112e984848484035f611ae1565b50505050565b6001600160a01b03831661131857604051634b637e8f60e11b81525f60048201526024016108a2565b6001600160a01b0382166113415760405163ec442f0560e01b81525f60048201526024016108a2565b611287838383611bc5565b5f61084e611bd0565b5f65ffffffffffff821115611387576040516306dfcc6560e41b815260306004820152602481018390526044016108a2565b5090565b81545f90818160058111156113e7575f6113a484611c43565b6113ae9085612f4f565b5f8881526020902090915081015465ffffffffffff90811690871610156113d7578091506113e5565b6113e2816001612f3c565b92505b505b5f6113f487878585611d27565b9050801561142e576114188761140b600184612f4f565b5f91825260209091200190565b54600160301b90046001600160d01b0316611430565b5f5b979650505050505050565b3361146d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108f85760405163118cdaa760e01b81523360048201526024016108a2565b61149e611d86565b5f80516020613291833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b03821661151e5760405163ec442f0560e01b81525f60048201526024016108a2565b61090c5f8383611bc5565b6001600160a01b03821661155257604051634b637e8f60e11b81525f60048201526024016108a2565b61090c825f83611bc5565b5f61084e43611355565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115e15f80516020613271833981519152546001600160a01b031690565b6001600160a01b031614155b156108f85760405163703e46dd60e11b815260040160405180910390fd5b61091a61143b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561166d575060408051601f3d908101601f1916820190925261166a91810190612f11565b60015b61169557604051634c9c8ce360e01b81526001600160a01b03831660048201526024016108a2565b5f8051602061327183398151915281146116c557604051632a87526960e21b8152600481018290526024016108a2565b6112878383611db5565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108f85760405163703e46dd60e11b815260040160405180910390fd5b5f805160206132118339815191525f611730846109cb565b6001600160a01b038581165f8181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46112e9818461179a87611e0a565b611e14565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0160205260408120545f805160206132118339815191529061083e90611f8a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f61081a82611fba565b611870611fe2565b5f80516020613291833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336114d7565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206132518339815191529161078590612e81565b60605f5f80516020613251833981519152610774565b80545f9080156119335761191d8361140b600184612f4f565b54600160301b90046001600160d01b031661083e565b5f9392505050565b5f61081a61194761134c565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061197788888888612012565b92509250925061198782826120da565b50909695505050505050565b5f61199d83611a37565b9050808214611287576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016108a2565b6119d9612192565b61090c82826121db565b6108f8612192565b6119f3612192565b6108f861222b565b611a03612192565b61091a8161224b565b611a14612192565b61091a81604051806040016040528060018152602001603160f81b815250612253565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805180820182525f80825260208083018290526001600160a01b03861682527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d019052919091205f8051602061321183398151915290611ad990846122b2565b949350505050565b5f805160206132318339815191526001600160a01b038516611b185760405163e602df0560e01b81525f60048201526024016108a2565b6001600160a01b038416611b4157604051634a1406b160e11b81525f60048201526024016108a2565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115611bbe57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611bb591815260200190565b60405180910390a35b5050505050565b61128783838361231f565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bfa6123a4565b611c0261240c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f815f03611c5257505f919050565b5f6001611c5e8461244e565b901c6001901b90506001818481611c7757611c77613062565b048201901c90506001818481611c8f57611c8f613062565b048201901c90506001818481611ca757611ca7613062565b048201901c90506001818481611cbf57611cbf613062565b048201901c90506001818481611cd757611cd7613062565b048201901c90506001818481611cef57611cef613062565b048201901c90506001818481611d0757611d07613062565b048201901c905061083e81828581611d2157611d21613062565b046124e1565b5f5b81831015611d7e575f611d3c84846124f6565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff161115611d6a57809250611d78565b611d75816001612f3c565b93505b50611d29565b509392505050565b5f805160206132918339815191525460ff166108f857604051638dfc202b60e01b815260040160405180910390fd5b611dbe82612510565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611e02576112878282612573565b61090c6125e5565b5f61081a82610bbf565b5f805160206132118339815191526001600160a01b0384811690841614801590611e3d57505f82115b156112e9576001600160a01b03841615611ee6576001600160a01b0384165f90815260018201602052604081208190611e8190612604611e7c8761260f565b612642565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611edb929190918252602082015260400190565b60405180910390a250505b6001600160a01b038316156112e9576001600160a01b0383165f90815260018201602052604081208190611f209061267a611e7c8761260f565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611f7a929190918252602082015260400190565b60405180910390a2505050505050565b5f63ffffffff821115611387576040516306dfcc6560e41b815260206004820152602481018390526044016108a2565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610bd0565b5f805160206132918339815191525460ff16156108f85760405163d93c066560e01b815260040160405180910390fd5b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561204b57505f915060039050826120d0565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561209c573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b0381166120c757505f9250600191508290506120d0565b92505f91508190505b9450945094915050565b5f8260038111156120ed576120ed613076565b036120f6575050565b600182600381111561210a5761210a613076565b036121285760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561213c5761213c613076565b0361215d5760405163fce698f760e01b8152600481018290526024016108a2565b600382600381111561217157612171613076565b0361090c576040516335e2f38360e21b8152600481018290526024016108a2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108f857604051631afcd79f60e31b815260040160405180910390fd5b6121e3612192565b5f805160206132318339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361221c84826130ce565b50600481016112e983826130ce565b612233612192565b5f80516020613291833981519152805460ff19169055565b611248612192565b61225b612192565b5f805160206132518339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261229484826130ce565b50600381016122a383826130ce565b505f8082556001909101555050565b604080518082019091525f8082526020820152825f018263ffffffff16815481106122df576122df613189565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b61232a838383612685565b6001600160a01b038316612399575f6123617f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90506001600160d01b038082111561239657604051630e58ae9360e11b815260048101839052602481018290526044016108a2565b50505b611287838383612698565b5f5f80516020613251833981519152816123bc6118b0565b8051909150156123d457805160209091012092915050565b815480156123e3579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f80516020613251833981519152816124246118ee565b80519091501561243c57805160209091012092915050565b600182015480156123e3579392505050565b5f80608083901c1561246257608092831c92015b604083901c1561247457604092831c92015b602083901c1561248657602092831c92015b601083901c1561249857601092831c92015b600883901c156124aa57600892831c92015b600483901c156124bc57600492831c92015b600283901c156124ce57600292831c92015b600183901c1561081a5760010192915050565b5f8183106124ef578161083e565b5090919050565b5f612504600284841861319d565b61083e90848416612f3c565b806001600160a01b03163b5f0361254557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016108a2565b5f8051602061327183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161258f91906131bc565b5f60405180830381855af49150503d805f81146125c7576040519150601f19603f3d011682016040523d82523d5f602084013e6125cc565b606091505b50915091506125dc858383612709565b95945050505050565b34156108f85760405163b398979f60e01b815260040160405180910390fd5b5f61083e82846131d2565b5f6001600160d01b03821115611387576040516306dfcc6560e41b815260d06004820152602481018390526044016108a2565b5f8061266d61264f610d52565b61266561265b88611904565b868863ffffffff16565b879190612765565b915091505b935093915050565b5f61083e82846131f1565b61268d611fe2565b611287838383612772565b5f805160206132118339815191526001600160a01b0384166126ca576126c78160020161267a611e7c8561260f565b50505b6001600160a01b0383166126ee576126eb81600201612604611e7c8561260f565b50505b6112e96126fa856109cb565b612703856109cb565b84611e14565b60608261271e57612719826128ab565b61083e565b815115801561273557506001600160a01b0384163b155b1561275e57604051639996b31560e01b81526001600160a01b03851660048201526024016108a2565b508061083e565b5f8061266d8585856128d4565b5f805160206132318339815191526001600160a01b0384166127ac5781816002015f8282546127a19190612f3c565b9091555061281c9050565b6001600160a01b0384165f90815260208290526040902054828110156127fe5760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016108a2565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661283a576002810180548390039055612858565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161289d91815260200190565b60405180910390a350505050565b8051156128bb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b82545f90819080156129f0575f6128f08761140b600185612f4f565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561294457604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff80881691160361299057846129678861140b600186612f4f565b80546001600160d01b0392909216600160301b0265ffffffffffff9092169190911790556129e0565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d81529190912094519151909216600160301b029216919091179101555b6020015192508391506126729050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316600160301b029190931617920191909155905081612672565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61083e6020830184612a4a565b6001600160a01b038116811461091a575f80fd5b5f8060408385031215612aaf575f80fd5b8235612aba81612a8a565b946020939093013593505050565b5f805f60608486031215612ada575f80fd5b8335612ae581612a8a565b92506020840135612af581612a8a565b929592945050506040919091013590565b5f60208284031215612b16575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612b42575f80fd5b8235612b4d81612a8a565b9150602083013567ffffffffffffffff811115612b68575f80fd5b8301601f81018513612b78575f80fd5b803567ffffffffffffffff811115612b9257612b92612b1d565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715612bc157612bc1612b1d565b604052818152828201602001871015612bd8575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215612c07575f80fd5b813561083e81612a8a565b5f805f805f60808688031215612c26575f80fd5b8535612c3181612a8a565b94506020860135612c4181612a8a565b935060408601359250606086013567ffffffffffffffff811115612c63575f80fd5b8601601f81018813612c73575f80fd5b803567ffffffffffffffff811115612c89575f80fd5b886020828401011115612c9a575f80fd5b959894975092955050506020019190565b60ff60f81b8816815260e060208201525f612cc960e0830189612a4a565b8281036040840152612cdb8189612a4a565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015612d30578351835260209384019390920191600101612d12565b50909b9a5050505050505050505050565b803560ff81168114612d51575f80fd5b919050565b5f805f805f8060c08789031215612d6b575f80fd5b8635612d7681612a8a565b95506020870135945060408701359350612d9260608801612d41565b9598949750929560808101359460a0909101359350915050565b5f805f805f805f60e0888a031215612dc2575f80fd5b8735612dcd81612a8a565b96506020880135612ddd81612a8a565b95506040880135945060608801359350612df960808901612d41565b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215612e27575f80fd5b8235612e3281612a8a565b91506020830135612e4281612a8a565b809150509250929050565b5f8060408385031215612e5e575f80fd5b8235612e6981612a8a565b9150602083013563ffffffff81168114612e42575f80fd5b600181811c90821680612e9557607f821691505b602082108103612eb357634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b03878116825286166020820152604081018590526060810184905260a0608082018190528101829052818360c08301375f81830160c090810191909152601f909201601f1916010195945050505050565b5f60208284031215612f21575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561081a5761081a612f28565b8181038181111561081a5761081a612f28565b6001815b600184111561267257808504811115612f8157612f81612f28565b6001841615612f8f57908102905b60019390931c928002612f66565b5f82612fab5750600161081a565b81612fb757505f61081a565b8160018114612fcd5760028114612fd757612ff3565b600191505061081a565b60ff841115612fe857612fe8612f28565b50506001821b61081a565b5060208310610133831016604e8410600b8410161715613016575081810a61081a565b6130225f198484612f62565b805f190482111561303557613035612f28565b029392505050565b5f61083e60ff841683612f9d565b808202811582820484141761081a5761081a612f28565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b601f82111561128757805f5260205f20601f840160051c810160208510156130af5750805b601f840160051c820191505b81811015611bbe575f81556001016130bb565b815167ffffffffffffffff8111156130e8576130e8612b1d565b6130fc816130f68454612e81565b8461308a565b6020601f82116001811461312e575f83156131175750848201515b5f19600385901b1c1916600184901b178455611bbe565b5f84815260208120601f198516915b8281101561315d578785015182556020948501946001909201910161313d565b508482101561317a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b5f826131b757634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f920191825250919050565b6001600160d01b03828116828216039081111561081a5761081a612f28565b6001600160d01b03818116838216019081111561081a5761081a612f2856fee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a264697066735822122057f7872a6215eea5af8110494cd831f7eeec6e41be7e1cae8683d91631e8176764736f6c634300081a0033